<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Behavior-driven development</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Behavior-driven_development"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Behavior-driven_development rootpage-Behavior-driven_development skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Behavior-driven development</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1246091330">
/* start https://en.wikipedia.org/ */
.mw-parser-output .sidebar{width:22em;float:right;clear:right;margin:0.5em 0 1em 1em;background:var(--background-color-neutral-subtle,#f8f9fa);border:1px solid var(--border-color-base,#a2a9b1);padding:0.2em;text-align:center;line-height:1.4em;font-size:88%;border-collapse:collapse;display:table}body.skin-minerva .mw-parser-output .sidebar{display:table!important;float:right!important;margin:0.5em 0 1em 1em!important}.mw-parser-output .sidebar-subgroup{width:100%;margin:0;border-spacing:0}.mw-parser-output .sidebar-left{float:left;clear:left;margin:0.5em 1em 1em 0}.mw-parser-output .sidebar-none{float:none;clear:both;margin:0.5em 1em 1em 0}.mw-parser-output .sidebar-outer-title{padding:0 0.4em 0.2em;font-size:125%;line-height:1.2em;font-weight:bold}.mw-parser-output .sidebar-top-image{padding:0.4em}.mw-parser-output .sidebar-top-caption,.mw-parser-output .sidebar-pretitle-with-top-image,.mw-parser-output .sidebar-caption{padding:0.2em 0.4em 0;line-height:1.2em}.mw-parser-output .sidebar-pretitle{padding:0.4em 0.4em 0;line-height:1.2em}.mw-parser-output .sidebar-title,.mw-parser-output .sidebar-title-with-pretitle{padding:0.2em 0.8em;font-size:145%;line-height:1.2em}.mw-parser-output .sidebar-title-with-pretitle{padding:0.1em 0.4em}.mw-parser-output .sidebar-image{padding:0.2em 0.4em 0.4em}.mw-parser-output .sidebar-heading{padding:0.1em 0.4em}.mw-parser-output .sidebar-content{padding:0 0.5em 0.4em}.mw-parser-output .sidebar-content-with-subgroup{padding:0.1em 0.4em 0.2em}.mw-parser-output .sidebar-above,.mw-parser-output .sidebar-below{padding:0.3em 0.8em;font-weight:bold}.mw-parser-output .sidebar-collapse .sidebar-above,.mw-parser-output .sidebar-collapse .sidebar-below{border-top:1px solid #aaa;border-bottom:1px solid #aaa}.mw-parser-output .sidebar-navbar{text-align:right;font-size:115%;padding:0 0.4em 0.4em}.mw-parser-output .sidebar-list-title{padding:0 0.4em;text-align:left;font-weight:bold;line-height:1.6em;font-size:105%}.mw-parser-output .sidebar-list-title-c{padding:0 0.4em;text-align:center;margin:0 3.3em}@media(max-width:640px){body.mediawiki .mw-parser-output .sidebar{width:100%!important;clear:both;float:none!important;margin-left:0!important;margin-right:0!important}}body.skin--responsive .mw-parser-output .sidebar a>img{max-width:none!important}@media screen{html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-list-title,html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle{background:transparent!important}html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle a{color:var(--color-progressive)!important}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-list-title,html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle{background:transparent!important}html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle a{color:var(--color-progressive)!important}}@media print{body.ns-0 .mw-parser-output .sidebar{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><table class="sidebar sidebar-collapse nomobile"><tbody><tr><td class="sidebar-pretitle">Part of a series on</td></tr><tr><th class="sidebar-title-with-pretitle"><a href="Software_development" title="Software development">Software development</a></th></tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)">Core activities</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Data_modeling" title="Data modeling">Data modeling</a></li>
<li><a href="Software_development_process" title="Software development process">Processes</a></li>
<li><a href="Requirements_analysis" title="Requirements analysis">Requirements</a></li>
<li><a href="Software_design" title="Software design">Design</a></li>
<li><a href="Software_construction" title="Software construction">Construction</a></li>
<li><a href="Software_engineering" title="Software engineering">Engineering</a></li>
<li><a href="Software_testing" title="Software testing">Testing</a></li>
<li><a href="Debugging" title="Debugging">Debugging</a></li>
<li><a href="Software_deployment" title="Software deployment">Deployment</a></li>
<li><a href="Software_maintenance" title="Software maintenance">Maintenance</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)">Paradigms and models</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Agile_software_development" title="Agile software development">Agile</a></li>
<li><a href="Cleanroom_software_engineering" title="Cleanroom software engineering">Cleanroom</a></li>
<li><a href="Incremental_build_model" title="Incremental build model">Incremental</a></li>
<li><a href="Software_prototyping" title="Software prototyping">Prototyping</a></li>
<li><a href="Spiral_model" title="Spiral model">Spiral</a></li>
<li><a href="V-model_(software_development)" title="V-model (software development)">V model</a></li>
<li><a href="Waterfall_model" title="Waterfall model">Waterfall</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)"><a href="Software_development_methodology" class="mw-redirect" title="Software development methodology">Methodologies</a> and frameworks</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Adaptive_software_development" title="Adaptive software development">ASD</a></li>
<li><a href="Disciplined_agile_delivery" title="Disciplined agile delivery">DAD</a></li>
<li><a href="DevOps" title="DevOps">DevOps</a></li>
<li><a href="Dynamic_systems_development_method" title="Dynamic systems development method">DSDM</a></li>
<li><a href="Feature-driven_development" title="Feature-driven development">FDD</a></li>
<li><a href="Iterative_and_incremental_development" title="Iterative and incremental development">IID</a></li>
<li><a href="Kanban_(development)" title="Kanban (development)">Kanban</a></li>
<li><a href="Lean_software_development" title="Lean software development">Lean SD</a></li>
<li><a href="Scrum_(software_development)#Large-scale_Scrum" title="Scrum (software development)">LeSS</a></li>
<li><a href="Model-driven_development" class="mw-redirect" title="Model-driven development">MDD</a></li>
<li><a href="Microsoft_Solutions_Framework" title="Microsoft Solutions Framework">MSF</a></li>
<li><a href="Personal_software_process" title="Personal software process">PSP</a></li>
<li><a href="Rapid_application_development" title="Rapid application development">RAD</a></li>
<li><a href="Rational_unified_process" title="Rational unified process">RUP</a></li>
<li><a href="Scaled_agile_framework" title="Scaled agile framework">SAFe</a></li>
<li><a href="Scrum_(software_development)" title="Scrum (software development)">Scrum</a></li>
<li><a href="SEMAT" title="SEMAT">SEMAT</a></li>
<li><a href="Test-driven_development" title="Test-driven development">TDD</a></li>
<li><a href="Team_software_process" title="Team software process">TSP</a></li>
<li><a href="Unified_process" title="Unified process">UP</a></li>
<li><a href="Extreme_programming" title="Extreme programming">XP</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)">Supporting disciplines</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Software_configuration_management" title="Software configuration management">Configuration management</a></li>
<li><a href="Deployment_management#Computer_science" title="Deployment management">Deployment management</a></li>
<li><a href="Software_documentation" title="Software documentation">Documentation</a></li>
<li><a href="Software_project_management" title="Software project management">Project management</a></li>
<li><a href="Software_quality_assurance" title="Software quality assurance">Quality assurance</a></li>
<li><a href="User_experience" title="User experience">User experience</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)">Practices</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Acceptance_test-driven_development" title="Acceptance test-driven development">ATDD</a></li>
<li><a href="Extreme_programming_practices#Collective_code_ownership" title="Extreme programming practices">CCO</a></li>
<li><a href="Continuous_delivery" title="Continuous delivery">CD</a></li>
<li><a href="Continuous_integration" title="Continuous integration">CI</a></li>
<li><a href="Domain-driven_design" title="Domain-driven design">DDD</a></li>
<li><a href="Pair_programming" title="Pair programming">PP</a></li>
<li><a href="Specification_by_example" title="Specification by example">SBE</a></li>
<li><a href="Stand-up_meeting" title="Stand-up meeting">Stand-up</a></li>
<li><a href="Test-driven_development" title="Test-driven development">TDD</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)"><a href="Programming_tool" title="Programming tool">Tools</a></div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Build_automation" title="Build automation">Build automation</a></li>
<li><a href="Compiler" title="Compiler">Compiler</a></li>
<li><a href="Debugger" title="Debugger">Debugger</a></li>
<li><a href="Graphical_user_interface_builder" title="Graphical user interface builder">GUI builder</a></li>
<li><a href="Integrated_development_environment" title="Integrated development environment">IDE</a></li>
<li><a href="Infrastructure_as_code" title="Infrastructure as code">Infrastructure as code</a></li>
<li><a href="Profiling_(computer_programming)" title="Profiling (computer programming)">Profiler</a></li>
<li><a href="Application-release_automation" title="Application-release automation">Release automation</a></li>
<li><a href="UML_tool" title="UML tool">UML Modeling</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)">Standards and bodies of knowledge</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Capability_Maturity_Model_Integration" title="Capability Maturity Model Integration">CMMI</a></li>
<li><a href="IEEE_Standards_Association" title="IEEE Standards Association">IEEE standards</a></li>
<li><a href="International_Requirements_Engineering_Board" title="International Requirements Engineering Board">IREB</a></li>
<li><a href="ISO_9001" class="mw-redirect" title="ISO 9001">ISO 9001</a></li>
<li><a href="ISO/IEC_JTC_1/SC_7" title="ISO/IEC JTC 1/SC 7">ISO/IEC standards</a></li>
<li><a href="ITIL" title="ITIL">ITIL</a></li>
<li><a href="Object_Management_Group" title="Object Management Group">OMG</a></li>
<li><a href="Project_Management_Body_of_Knowledge" title="Project Management Body of Knowledge">PMBOK</a></li>
<li><a href="Software_Engineering_Body_of_Knowledge" title="Software Engineering Body of Knowledge">SWEBOK</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)">Glossaries</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Glossary_of_artificial_intelligence" title="Glossary of artificial intelligence">Artificial intelligence</a></li>
<li><a href="Glossary_of_computer_science" title="Glossary of computer science">Computer science</a></li>
<li><a href="Glossary_of_electrical_and_electronics_engineering" title="Glossary of electrical and electronics engineering">Electrical and electronics engineering</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)">Outlines</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Outline_of_software_development" title="Outline of software development">Outline of software development</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-navbar"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}
/* end https://en.wikipedia.org/ */
</style></td></tr></tbody></table>
<p><b>Behavior-driven development</b> (<b>BDD</b>) involves naming <a href="Software_testing" title="Software testing">software tests</a> using <a href="Domain_model" title="Domain model">domain language</a> to describe the behavior of the <a href="Source_code" title="Source code">code</a>.
</p><p>BDD involves use of a <a href="Domain-specific_language" title="Domain-specific language">domain-specific language</a> (DSL) using natural-language constructs (e.g., English-like sentences) that can express the behavior and the expected outcomes.
</p><p>Proponents claim it encourages collaboration among developers, quality assurance experts, and customer representatives in a software project.<sup id="cite_ref-BDD_Def_BehaviourDriven_1-0" class="reference"><a href="#cite_note-BDD_Def_BehaviourDriven-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-IntroBDD_2-0" class="reference"><a href="#cite_note-IntroBDD-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> It encourages teams to use conversation and concrete examples to formalize a shared understanding of how the application should behave.<sup id="cite_ref-BDD_in_action_3-0" class="reference"><a href="#cite_note-BDD_in_action-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> BDD is considered an effective practice especially when the <i>problem space</i> is complex.<sup id="cite_ref-When_to_adopt_BDD_4-0" class="reference"><a href="#cite_note-When_to_adopt_BDD-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
</p><p>BDD is considered a refinement of <a href="Test-driven_development" title="Test-driven development">test-driven development</a> (TDD).<sup id="cite_ref-BDD_Def_BehaviourDriven_1-1" class="reference"><a href="#cite_note-BDD_Def_BehaviourDriven-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-BDD_JW_5-0" class="reference"><a href="#cite_note-BDD_JW-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-BDD_CodeMagazine_7-0" class="reference"><a href="#cite_note-BDD_CodeMagazine-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-ATDD_vs_BDD_8-0" class="reference"><a href="#cite_note-ATDD_vs_BDD-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> BDD combines the techniques of TDD with ideas from <a href="Domain-driven_design" title="Domain-driven design">domain-driven design</a> and <a href="Object-oriented_analysis_and_design" title="Object-oriented analysis and design">object-oriented analysis and design</a> to provide software development and management teams with shared tools and a shared process to collaborate on software development.<sup id="cite_ref-BDD_Def_BehaviourDriven_1-2" class="reference"><a href="#cite_note-BDD_Def_BehaviourDriven-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-BDD_CodeMagazine_7-1" class="reference"><a href="#cite_note-BDD_CodeMagazine-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>
</p><p>At a high level, BDD is an idea about how software development should be managed by both business interests and technical insight. Its <i>practice</i> involves use of specialized tools.<sup id="cite_ref-BDD_JW_5-1" class="reference"><a href="#cite_note-BDD_JW-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> Some tools specifically for BDD can be used for TDD. The tools automate the <a href="Domain-driven_design#Building_blocks" title="Domain-driven design">ubiquitous language</a>.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Overview">Overview</h2></div>
<p>BDD is a process by which DSL structured natural-language statements are converted into executable tests. The result are tests that read like acceptance criteria for a given function.
</p><p>As such, BDD is an extension of TDD.
</p><p>BDD focuses on:
</p>
<ul><li>Where to start in the process</li>
<li>What to test and what not to test</li>
<li>How much to test in one go</li>
<li>What to call the tests</li>
<li>How to understand why a test fails</li></ul>
<p>At its heart, BDD is about rethinking the approach to <a href="Automated_testing" class="mw-redirect" title="Automated testing">automated testing</a> (including <a href="Unit_testing" title="Unit testing">unit testing</a> and <a href="Acceptance_testing" title="Acceptance testing">acceptance testing</a>) in order to avoid issues that naturally arise. For example, BDD suggests that unit test names be whole sentences starting with a conditional verb ("should" in English for example) and should be written in order of business value. Acceptance tests should be written using the standard agile framework of a <a href="User_story" title="User story">user story</a>: "Being a [role/actor/stakeholder] I want a [feature/capability] yielding a [benefit]". Acceptance criteria should be written in terms of scenarios and implemented in classes: <a href="Given-When-Then" title="Given-When-Then">Given [initial context], when [event occurs], then [ensure some outcomes] </a>.
</p><p>Starting from this point, many people developed BDD frameworks over a period of years, finally framing it in terms of a communication and collaboration framework for developers, <a href="Quality_assurance" title="Quality assurance">QA</a> and non-technical or business participants in a software project.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Principles">Principles</h2></div>
<p>BDD suggests that software tests should be named in terms of desired <i>behavior</i>.<sup id="cite_ref-BDD_JW_5-2" class="reference"><a href="#cite_note-BDD_JW-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-BDD_CodeMagazine_7-2" class="reference"><a href="#cite_note-BDD_CodeMagazine-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> Borrowing from <a href="Agile_software_development" title="Agile software development">agile software development</a> the "desired behavior" in this case consists of the requirements set by the business — that is, the desired behavior that has <a href="Business_value" title="Business value">business value</a> for whatever entity commissioned the software unit under construction.<sup id="cite_ref-BDD_JW_5-3" class="reference"><a href="#cite_note-BDD_JW-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> Within BDD practice, this is referred to as BDD being an "outside-in" activity.
</p><p>TDD does not differentiate tests in terms of high-level software requirements, low-level technical details or anything in between. One way of looking at BDD therefore, is that it is an evolution of TDD which makes more specific choices.
</p>
<div class="mw-heading mw-heading3"><h3 id="Behavioral_specifications">Behavioral specifications</h3></div>
<p>Another BDD suggestion relates to <i>how</i> the desired behavior should be specified. BDD suggests using a semi-formal format for behavioral specification which is borrowed from user story specifications from the field of <a href="Object-oriented_analysis_and_design" title="Object-oriented analysis and design">object-oriented analysis and design</a>. The <a href="Scenario_(computing)" title="Scenario (computing)">scenario</a> aspect of this format may be regarded as an application of <a href="Hoare_logic" title="Hoare logic">Hoare logic</a> to behavioral specification of software using the domain-specific language.
</p><p>BDD suggests that business analysts and software developers should collaborate in this area and should specify behavior in terms of user stories, which are each explicitly documented. Each user story should, to some extent, follow the structure:<sup id="cite_ref-BDD_JW_5-4" class="reference"><a href="#cite_note-BDD_JW-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>
</p>
<dl><dt>Title</dt>
<dd>An explicit title.</dd></dl>
<dl><dt>Narrative</dt>
<dd>A short introductory section with the following structure:
<ul><li><b>As a</b>: the person or role who will benefit from the feature;</li>
<li><b>I want</b>: the feature;</li>
<li><b>so that</b>: the benefit or value of the feature.</li></ul></dd></dl>
<dl><dt>Acceptance criteria</dt>
<dd>A description of each specific <a href="Scenario_(computing)" title="Scenario (computing)">scenario</a> of the narrative with the following structure:
<ul><li><b>Given</b>: the initial context at the beginning of the scenario, in one or more clauses;</li>
<li><b>When</b>: the event that triggers the scenario;</li>
<li><b>Then</b>: the expected outcome, in one or more clauses.</li></ul></dd></dl>
<p>BDD does not require how this information is formatted, but it does suggest that a team should decide on a relatively simple, standardized format with the above elements.<sup id="cite_ref-BDD_JW_5-5" class="reference"><a href="#cite_note-BDD_JW-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> It also suggests that the scenarios should be phrased declaratively rather than imperatively — in the business language, with no reference to elements of the UI through which the interactions take place.<sup id="cite_ref-declarative_10-0" class="reference"><a href="#cite_note-declarative-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup> This format is referred to in <a href="Cucumber_(software)" title="Cucumber (software)">Cucumber</a> as the <a href="Cucumber_(software)#Gherkin_language" title="Cucumber (software)">Gherkin language</a>.
</p>
<div class="mw-heading mw-heading3"><h3 id="Specification_as_a_ubiquitous_language">Specification as a ubiquitous language</h3></div>
<p>BDD borrows the concept of the <i>ubiquitous language</i> from <a href="Domain_driven_design" class="mw-redirect" title="Domain driven design">domain driven design</a>.<sup id="cite_ref-BDD_JW_5-6" class="reference"><a href="#cite_note-BDD_JW-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-BDD_CodeMagazine_7-3" class="reference"><a href="#cite_note-BDD_CodeMagazine-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> A ubiquitous language is a (semi-)formal language that is shared by all members of a software development team — both software developers and non-technical personnel.<sup id="cite_ref-DDD_Evans_11-0" class="reference"><a href="#cite_note-DDD_Evans-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup> The language in question is both used and developed by all team members as a common means of discussing the domain of the software in question.<sup id="cite_ref-DDD_Evans_11-1" class="reference"><a href="#cite_note-DDD_Evans-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup> In this way BDD becomes a vehicle for communication between all the different roles in a software project.<sup id="cite_ref-BDD_JW_5-7" class="reference"><a href="#cite_note-BDD_JW-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>
</p><p>A common risk with software development includes communication breakdowns between Developers and Business Stakeholders.<sup id="cite_ref-BDD_comms_12-0" class="reference"><a href="#cite_note-BDD_comms-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> BDD uses the specification of desired behavior as a ubiquitous language for the project Team members. This is the reason that BDD insists on a semi-formal language for behavioral specification: some formality is a requirement for being a ubiquitous language.<sup id="cite_ref-BDD_JW_5-8" class="reference"><a href="#cite_note-BDD_JW-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> In addition, having such a ubiquitous language creates a domain model of specifications, so that specifications may be reasoned about formally.<sup id="cite_ref-BDD_CodeProj_13-0" class="reference"><a href="#cite_note-BDD_CodeProj-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> This model is also the basis for the different BDD-supporting software tools that are available.
</p><p>The example given above establishes a user story for a software system under development. This user story identifies a stakeholder, a business effect and a business value. It also describes several scenarios, each with a precondition, trigger and expected outcome. Each of these parts is exactly identified by the more formal part of the language (the term <b>Given</b> might be considered a <a href="Keyword_(computer_programming)" class="mw-redirect" title="Keyword (computer programming)">keyword</a>, for example) and may therefore be processed in some way by a tool that understands the formal parts of the ubiquitous language.
</p><p>Most BDD applications use text-based DSLs and specification approaches. However, graphical modeling of integration scenarios has also been applied successfully in practice, e.g., for testing purposes. <sup id="cite_ref-ieeeswbdd_14-0" class="reference"><a href="#cite_note-ieeeswbdd-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Specialized_tooling">Specialized tooling</h2></div>
<p>Much like TDD, BDD may involve using specialized tooling.
</p><p>BDD requires not only test code as does TDD, but also a document that describes behavior in a more human-readable language. This requires a two-step process for executing the tests, reading and parsing the descriptions, and reading the test code and finding the corresponding test implementation to execute. This process makes BDD more laborious for developers. Proponents suggest that due to its human-readable nature the value of those documents extends to a relatively non-technical audience, and can hence serve as a communication means for describing requirements ("features").
</p>
<div class="mw-heading mw-heading3"><h3 id="Tooling_principles">Tooling principles</h3></div>
<p>In principle, a BDD support tool is a testing framework for software, much like the tools that support TDD. However, where TDD tools tend to be quite free-format in what is allowed for specifying tests, BDD tools are linked to the definition of the ubiquitous language.
</p><p>The ubiquitous language allows business analysts to document behavioral requirements in a way that will also be understood by developers. The principle of BDD support tooling is to make these same requirements documents directly executable as a collection of tests. If this cannot be achieved because of reasons related to the technical tool that enables the execution of the specifications, then either the style of writing the behavioral requirements must be altered or the tool must be changed.<sup id="cite_ref-BDD_Enterprise_15-0" class="reference"><a href="#cite_note-BDD_Enterprise-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> The exact implementation of behavioral requirements varies per tool, but agile practice has come up with the following general process:
</p>
<ul><li>The tooling reads a specification document.</li>
<li>The tooling directly understands completely formal parts of the ubiquitous language (such as the <b>Given</b> keyword in the example above). Based on this, the tool breaks each scenario up into meaningful clauses.</li>
<li>Each individual clause in a scenario is transformed into some sort of parameter for a test for the user story. This part requires project-specific work by the software developers.</li>
<li>The framework then executes the test for each scenario, with the parameters from that scenario.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Story_versus_specification">Story versus specification</h2></div>
<p>A separate subcategory of behavior-driven development is formed by tools that use specifications as an input language rather than user stories. Specification tools don't use user stories as an input format for <a href="Scenario_testing" title="Scenario testing">test scenarios</a> but rather use functional specifications for units that are being tested. These specifications often have a more technical nature than user stories and are usually less convenient for communication with business personnel than are user stories.<sup id="cite_ref-BDD_JW_5-9" class="reference"><a href="#cite_note-BDD_JW-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-BDD_SPEC_OSHEROVE_16-0" class="reference"><a href="#cite_note-BDD_SPEC_OSHEROVE-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup> An example of a specification for a <a href="Stack_(abstract_data_type)" title="Stack (abstract data type)">stack</a> might look like this:
</p>
<pre><b>Specification:</b> Stack
<b>When</b> a new stack is created
<b>Then</b> it is empty
<b>When</b> an element is added to the stack
<b>Then</b> that element is at the top of the stack
<b>When</b> a stack has N elements
<b>And</b> element E is on top of the stack
<b>Then</b> a pop operation returns E
<b>And</b> the new size of the stack is N-1
</pre>
<p>Such a specification may exactly specify the behavior of the component being tested, but is less meaningful to a business user. As a result, specification-based testing is seen in BDD practice as a complement to story-based testing and operates at a lower level. Specification testing is often seen as a replacement for free-format unit testing.<sup id="cite_ref-BDD_SPEC_OSHEROVE_16-1" class="reference"><a href="#cite_note-BDD_SPEC_OSHEROVE-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="The_three_amigos">The three amigos</h2></div>
<p>The "three amigos", also referred to as a "Specification Workshop", is a meeting where the product owner discusses the requirement in the form of specification by example with different stakeholders like the QA and development team. The key goal for this discussion is to trigger conversation and identify any missing specifications. The discussion also gives a platform for QA, development team and product owner to converge and hear out each other's perspective to enrich the requirement and also make sure if they are building the right product.<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup>
</p><p>The three amigos are:
</p>
<ul><li>Business - Role of the business user is to define the problem only and not venture into suggesting a solution</li>
<li>Development - Role of the developers involve suggesting ways to fix the problem</li>
<li>Testing - Role of testers is to question the solution, bring up as many as different possibilities for brain storming through what-if scenarios and help make the solution more precise to fix the problem.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Specification_by_example" title="Specification by example">Specification by example</a></li>
<li><a href="Behat_(computer_science)" class="mw-redirect" title="Behat (computer science)">Behat</a> (PHP framework)</li>
<li><a href="Cynefin_framework" title="Cynefin framework">Cynefin framework</a></li>
<li><a href="Concordion" title="Concordion">Concordion</a> (Java framework)</li>
<li><a href="RSpec" title="RSpec">RSpec</a></li>
<li><a href="Gauge_(software)" title="Gauge (software)">Gauge</a></li>
<li><a href="Jasmine_(JavaScript_testing_framework)" class="mw-redirect" title="Jasmine (JavaScript testing framework)">Jasmine (JavaScript testing framework)</a></li>
<li><a href="Squish_(Froglogic)" title="Squish (Froglogic)">Squish GUI Tester</a> (BDD GUI Testing Tool for JavaScript, Python, Perl, Ruby and Tcl)</li>
<li><a href="Use_case" title="Use case">Use case</a></li>
<li><a href="Fitnesse" class="mw-redirect" title="Fitnesse">Fitnesse</a> has been used to roll out BDD<sup id="cite_ref-FitNesse_BDD_18-0" class="reference"><a href="#cite_note-FitNesse_BDD-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist reflist-columns references-column-width" style="column-width: 30em;">
<ol class="references">
<li id="cite_note-BDD_Def_BehaviourDriven-1"><span class="mw-cite-backlink">^ <a href="#cite_ref-BDD_Def_BehaviourDriven_1-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-BDD_Def_BehaviourDriven_1-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-BDD_Def_BehaviourDriven_1-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20150901151029/http://behaviourdriven.org/">"Behaviour-Driven Development"</a>. Archived from <a rel="nofollow" class="external text" href="http://behaviour-driven.org/">the original</a> on 1 September 2015<span class="reference-accessdate">. Retrieved <span class="nowrap">12 August</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-IntroBDD-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-IntroBDD_2-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFKeogh2009" class="citation web cs1">Keogh, Liz (2009-09-07). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20210225113241/https://skillsmatter.com/skillscasts/934-introduction-to-behaviour-driven-development">"Introduction to Behavior-Driven Development"</a>. <i>SkillsMatterr</i>. Archived from <a rel="nofollow" class="external text" href="https://skillsmatter.com/skillscasts/934-introduction-to-behaviour-driven-development">the original</a> on 2021-02-25<span class="reference-accessdate">. Retrieved <span class="nowrap">1 May</span> 2019</span>.</cite></span>
</li>
<li id="cite_note-BDD_in_action-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-BDD_in_action_3-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFJohn_Ferguson_Smart2014" class="citation book cs1">John Ferguson Smart (2014). <i>BDD in Action: Behavior-Driven Development for the Whole Software Lifecycle</i>. Manning Publications. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9781617291654</bdi>.</cite></span>
</li>
<li id="cite_note-When_to_adopt_BDD-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-When_to_adopt_BDD_4-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFTharayil2016" class="citation web cs1">Tharayil, Ranjith (15 February 2016). <a rel="nofollow" class="external text" href="https://www.solutionsiq.com/resource/blog-post/behavior-driven-development-simplifying-the-complex-problem-space/">"Behavior-Driven Development: Simplifying the Complex Problem Space"</a>. <i>SolutionsIQ</i><span class="reference-accessdate">. Retrieved <span class="nowrap">15 February</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-BDD_JW-5"><span class="mw-cite-backlink">^ <a href="#cite_ref-BDD_JW_5-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-BDD_JW_5-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-BDD_JW_5-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-BDD_JW_5-3"><sup><i><b>d</b></i></sup></a> <a href="#cite_ref-BDD_JW_5-4"><sup><i><b>e</b></i></sup></a> <a href="#cite_ref-BDD_JW_5-5"><sup><i><b>f</b></i></sup></a> <a href="#cite_ref-BDD_JW_5-6"><sup><i><b>g</b></i></sup></a> <a href="#cite_ref-BDD_JW_5-7"><sup><i><b>h</b></i></sup></a> <a href="#cite_ref-BDD_JW_5-8"><sup><i><b>i</b></i></sup></a> <a href="#cite_ref-BDD_JW_5-9"><sup><i><b>j</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFHaring2011" class="citation journal cs1 cs1-prop-foreign-lang-source">Haring, Ronald (February 2011). de Ruiter, Robert (ed.). "Behavior Driven development: Beter dan Test Driven Development". <i>Java Magazine</i> (in Dutch) (1). Veen Magazines: <span class="nowrap">14–</span>17. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/1571-6236">1571-6236</a>.</cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite id="CITEREFSolisWang2011" class="citation book cs1">Solis, Carlos; Wang, Xiaofeng (2011). "A Study of the Characteristics of Behaviour Driven Development". <i>2011 37th EUROMICRO Conference on Software Engineering and Advanced Applications</i>. pp. <span class="nowrap">383–</span>387. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FSEAA.2011.76">10.1109/SEAA.2011.76</a>. <a href="Hdl_(identifier)" class="mw-redirect" title="Hdl (identifier)">hdl</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://hdl.handle.net/10344%2F1256">10344/1256</a></span>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-4577-1027-8</bdi>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:3392536">3392536</a>.</cite></span>
</li>
<li id="cite_note-BDD_CodeMagazine-7"><span class="mw-cite-backlink">^ <a href="#cite_ref-BDD_CodeMagazine_7-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-BDD_CodeMagazine_7-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-BDD_CodeMagazine_7-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-BDD_CodeMagazine_7-3"><sup><i><b>d</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFBellware2008" class="citation web cs1">Bellware, Scott (June 2008). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20120712114206/http://www.code-magazine.com/article.aspx?quickid=0805061&page=1">"Behavior-Driven Development"</a>. <i>Code Magazine</i>. Archived from <a rel="nofollow" class="external text" href="http://www.code-magazine.com/article.aspx?quickid=0805061&page=1">the original</a> on 12 July 2012<span class="reference-accessdate">. Retrieved <span class="nowrap">1 May</span> 2019</span>.</cite></span>
</li>
<li id="cite_note-ATDD_vs_BDD-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-ATDD_vs_BDD_8-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFLiz_Keogh2011" class="citation web cs1">Liz Keogh (June 27, 2011). <a rel="nofollow" class="external text" href="https://lizkeogh.com/2011/06/27/atdd-vs-bdd-and-a-potted-history-of-some-related-stuff/">"ATDD vs. BDD, and a potted history of some related stuff"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">6 May</span> 2019</span>.</cite></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20091107220359/http://forums.pragprog.com/forums/95/topics/3035">"The RSpec Book – Question about Chapter 11: Writing software that matters"</a>. Archived from <a rel="nofollow" class="external text" href="http://forums.pragprog.com/forums/95/topics/3035">the original</a> on 2009-11-07<span class="reference-accessdate">. Retrieved <span class="nowrap">2009-08-09</span></span>.</cite></span>
</li>
<li id="cite_note-declarative-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-declarative_10-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFMabey" class="citation web cs1">Mabey, Ben. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20100603235246/http://benmabey.com/2008/05/19/imperative-vs-declarative-scenarios-in-user-stories.html">"Imperative vs. Declarative Scenarios in user stories"</a>. Archived from <a rel="nofollow" class="external text" href="http://benmabey.com/2008/05/19/imperative-vs-declarative-scenarios-in-user-stories.html">the original</a> on 3 June 2010<span class="reference-accessdate">. Retrieved <span class="nowrap">19 May</span> 2008</span>.</cite></span>
</li>
<li id="cite_note-DDD_Evans-11"><span class="mw-cite-backlink">^ <a href="#cite_ref-DDD_Evans_11-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-DDD_Evans_11-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFEvans2003" class="citation book cs1">Evans, Eric (2003). <a rel="nofollow" class="external text" href="http://www.domaindrivendesign.org/books/evans_2003"><i>Domain-Driven Design: Tackling Complexity in the Heart of Software</i></a>. Addison-Wesley. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-321-12521-7</bdi><span class="reference-accessdate">. Retrieved <span class="nowrap">August 12,</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-BDD_comms-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-BDD_comms_12-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFGeneca2011" class="citation web cs1">Geneca (16 Mar 2011). <a rel="nofollow" class="external text" href="http://www.geneca.com/75-business-executives-anticipate-software-projects-fail/">"Why Software Projects Fail"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">16 March</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-BDD_CodeProj-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-BDD_CodeProj_13-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFMahmudul_Haque_Azad2011" class="citation web cs1">Mahmudul Haque Azad (6 Feb 2011). <a rel="nofollow" class="external text" href="http://www.codeproject.com/Articles/148043/Say-Hello-To-Behavior-Driven-Development-BDD-Part">"Say Hello To Behavior Driven Development"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">12 August</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-ieeeswbdd-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-ieeeswbdd_14-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFLübke,_Danielvan_Lessen,_Tammo2016" class="citation journal cs1">Lübke, Daniel; van Lessen, Tammo (2016). "Modeling Test Cases in BPMN for Behavior-Driven Development". <i>IEEE Software</i>. <b>33</b> (5): <span class="nowrap">15–</span>21. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FMS.2016.117">10.1109/MS.2016.117</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:14539297">14539297</a>.</cite></span>
</li>
<li id="cite_note-BDD_Enterprise-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-BDD_Enterprise_15-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFAdam_Craven2015" class="citation web cs1">Adam Craven (September 21, 2015). <a rel="nofollow" class="external text" href="http://www.methodsandtools.com/archive/entreprisebdd.php">"Fundamentals of Enterprise-Scale Behaviour-Driven Development (BDD)"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">14 January</span> 2016</span>.</cite></span>
</li>
<li id="cite_note-BDD_SPEC_OSHEROVE-16"><span class="mw-cite-backlink">^ <a href="#cite_ref-BDD_SPEC_OSHEROVE_16-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-BDD_SPEC_OSHEROVE_16-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFRoy_Osherove2008" class="citation web cs1">Roy Osherove (October 4, 2008). <a rel="nofollow" class="external text" href="http://osherove.com/blog/2008/10/4/bdd-behavior-vs-spec-frameworks.html">"BDD: Behavior vs. Spec Frameworks"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">12 August</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.agilealliance.org/glossary/three-amigos/">"What are the Three Amigos in Agile?"</a>. <i>Agile Alliance</i>. 2016-06-16<span class="reference-accessdate">. Retrieved <span class="nowrap">2019-06-10</span></span>.</cite></span>
</li>
<li id="cite_note-FitNesse_BDD-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-FitNesse_BDD_18-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFKetil_Jensen2009" class="citation web cs1">Ketil Jensen (December 13, 2009). <a rel="nofollow" class="external text" href="http://ketiljensen.wordpress.com/2009/12/13/bdd-with-scenario-tables-in-fitnesse-slim/">"BDD with Scenario tables in Fitnesse Slim"</a>. <i>Walk the walk</i>. Wordpress<span class="reference-accessdate">. Retrieved <span class="nowrap">12 August</span> 2012</span>.</cite></span>
</li>
</ol></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-03-12" href="https://en.wikipedia.org/wiki/?title=Behavior-driven_development&oldid=1280022524">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>